Proceso de cálculo de víctimas imputadas
Homicidios desagregados por macrorregiones de la CEV- 1985–2018
Introducción
Si es su primera vez trabajando con los datos, no está muy familiarizado con el
paquete o simplemente quiere conocer más sobre el proyecto y el objetivo de
estos ejemplos y el paquete verdata, consulte:
https://github.com/HRDAG/CO-examples/blob/main/Introducción/output/Introducción.html
antes de continuar.
En este ejemplo, se ilustrará el proceso para obtener los datos imputados de
la presente violación (desagregado por macrorregiones de la CEV). Para esto
necesitaremos un insumo adicional que serán las macrorregiones
que se crearon en la Comisión de la Verdad (CEV). Así, procederemos a importar
dicho insumo que se encuentra en la carpeta “Recursos” (usando el paquete readr)
y realizando otras operaciones hechas para obtener los resultados por dicha variable:
macro_regiones <- readr::read_delim(here::here("Recursos/macroregiones_cev.csv"),
delim = "|", show_col_types = FALSE) %>%
dplyr::mutate_all(as.character) %>%
dplyr::rename(muni_code_hecho = cod_mpio) %>%
dplyr::mutate(muni_code_hecho = as.character(muni_code_hecho)) %>%
dplyr::mutate(muni_code_hecho = as.numeric(muni_code_hecho)) %>%
dplyr::filter(macroregion != "Sumapaz") %>%
dplyr::distinct(muni_code_hecho, .keep_all = TRUE)
paged_table(macro_regiones, options = list(rows.print = 10, cols.print = 5))Autenticando e importando la base de datos (réplicas)
Después de esto procedemos autenticando e importando la base de datos, esto a
través de dos funciones del paquete verdata: las funciones confirm_files y
read_replicates. La autenticación de los datos es pertinente dado que estos
fueron publicados con la licencia de atribución 4.0 internacional de Creative
Commons (CC BY 4.0). Esta licencia permite la distribución y modificación de la
información. Considerando que usted pudo haber llegado a estos datos por medio
de diferentes fuentes, es importante que sepa si han sido modificados o no, para
lo que puede hacer uso de estas dos funciones.
La función confirm_files autentica los archivos que han sido descargados.
Considerandoque cada violación tiene hasta 100 réplicas, esta función permite
autenticar cada uno de estos archivos sin necesidad de leerlos a R. Esto, en
caso de querer ahorrar recursos computacionales, o en caso de que no vaya a
realizar su análisis con todas las réplicas. Esta función devolverá una tabla
con dos columnas: una indicando la ruta del archivo y otra indicando si el archivo
es igual al publicado. En caso de que al menos uno de los archivos no sea igual,
la función devuelve el mensaje “Some replicate file contents do not match the published versions”.
Además, la función read_replicates permite 2 cosas: leer las réplicas a R en
una sola tabla (ya sea a partir de un formato csv o parquet) y verificar
que el contenido de las réplicas sea exactamente igual al publicado.
Cuando el argumento crash tiene su valor por default (TRUE), la función
retorna un objeto (data frame) si el contenido es igual, y el mensaje
“The content of the files is not identical to the ones published. This means the results of the analysis may potentially be inconsistent.” si el contenido de la base fue
previamente alterado/modificado, lo que quiere decir que los análisis que el
usuario realice serán inconsistentes y llevarán a resultados erróneos.
Este último error significa que nos datos no se han leído a R. Si por alguna
razón, usted quiere leer los datos a pesar de saber que no son los mismos datos
originalmente publicados, puede cambiar el argumento crash a FALSE, y,
en ese caso, podrá ver dicha información junto con el mismo mensaje de advertencia.
replicas_datos <- verdata::read_replicates(here::here("verdata-parquet/homicidio"),
"homicidio", c(1:10))
paged_table(replicas_datos, options = list(rows.print = 10, cols.print = 5))Vemos que tenemos 5 543 690 registros, nuestras réplicas van desde la número 1 hasta la 10. Además, nuestros datos tienen información sobre la categoría de edad de la víctima, el presunto departamento, el sexo, el año del hecho, la pertenencia étnica, entre otros. Sin embargo, para centrarnos en un análisis más específico, como el del anexo metodológico, procederemos a crear, transformar y/o filtrar algunas variables.
Filtrando las réplicas acorde con el filtro del anexo metodológico
La función filter_standard_cev nos permite crear, transformar o filtrar nuestra
información. Por ejemplo, las víctimas que se documentaron como víctimas
de la ex-guerrilla FARC-EP en años posteriores a 2016 pasaron a ser víctimas de
otras guerrillas, ya que este primer grupo oficialmente dejó de existir después
de dicho año (perp_change = TRUE). Adicionalmente nos genera columnas
adicionales como quinquenio, más categorías de edades, etc.
replicas_filtradas <- verdata::filter_standard_cev(replicas_datos,
"homicidio",
perp_change = TRUE) %>%
dplyr::mutate(muni_code_hecho = as.numeric(muni_code_hecho)) %>%
dplyr::left_join(macro_regiones, by = c("muni_code_hecho")) %>%
dplyr::filter(!is.na(macroregion))
paged_table(replicas_filtradas, options = list(rows.print = 10, cols.print = 5))Víctimas documentadas
Después de aplicado el filtro, es momento de obtener una tabla con la información
documentada, la misma que se obtuvo en el ejemplo sobre víctimas documentadas sobre el cálculo de víctimas documentadas para
esta misma variable (con la función summary_observed). Esta información
-previamente calculada- la importaremos desde la carpeta “output-documentados”.
tabla_documentada <- arrow::read_parquet(here::here("Resultados-CEV/Documentados/output-documentados/homicidio-macrorregion-documentado.parquet"))
paged_table(tabla_documentada, options = list(rows.print = 10, cols.print = 5))Víctimas imputadas
Posterior a esto se aplica la función de combine_replicates que,
como su nombre lo indica, permite combinar las réplicas para obtener lo que
denominamos “la media de la estimación puntual” junto con el intervalo de
confianza que permite dimensionar la incertidumbre de la imputación. Para esta
función se siguieron las reglas de combinación de Rubin, que, si desea estudiar con
más detalle de qué se trata, el libro Flexible Imputation of Missing Data de Stef van Buuren aborda paso a paso este proceso.
Ahora, esta función se compone de los siguientes argumentos: la violación a
analizar; 2) tabla_documentada, es decir, el data frame
derivado de la función summary_observed; 3) la base de datos
filtrada replicas_filtradas; 4) strata_vars que será nuevamente nuestra
variable de interés; 5) conflict_filter que filtra a aquellas personas
que fueron víctimas dentro del marco del conflicto armado (variable is_conflict
== TRUE) o no (variable is_conflict == FALSE).
Esta función también incluye un argumento denominado 5) forced_dis_filter que
aplica únicamente a la violación de desaparición. Esta indica si la víctima
fue desaparecida de forma “forzada” (forced_dis == TRUE) o no (forced_dis == FALSE).
Para otras violaciones este argumento siempre será “FALSE”.
También contamos con otros argumentos: 6) edad_minors_filter que filtra por
víctimas menores de edad (edad_minors_filter == TRUE) y 7) include_props
que permite incluir el cálculo de las proporciones para nuestras variables de
interés (include_props == TRUE). Cabe aclarar que el número de digitos por
defecto es = 2.
tabla_combinada <- verdata::combine_replicates("homicidio",
tabla_documentada,
replicas_filtradas,
strata_vars = "macroregion",
conflict_filter = TRUE,
forced_dis_filter = FALSE,
edad_minors_filter = FALSE,
include_props = FALSE)
paged_table(tabla_combinada, options = list(rows.print = 10, cols.print = 5))grafica <- ggplot(tabla_combinada,
aes(x = reorder(macroregion, -observed), y = 0)) +
geom_crossbar(aes(ymin = imp_lo, ymax = imp_hi, fill = "Rango de imputación"),
color = "#1F74B1") +
geom_col(aes(y = observed, fill = "Observado"), color = "#2F2F2F") +
geom_point(aes(y = imp_mean), pch = 21, color = '#63aee3', fill = "#1F74B1",
size = 1, stroke = 1.1) +
scale_y_continuous(labels = function(n){format(n, scientific = FALSE)}) +
theme_minimal() +
theme(legend.title = element_text(size = 6, face = "bold"),
legend.text = element_text(size = 9, face = "bold"),
legend.position = c(0.7, 0.7)) +
theme(axis.text.x = element_text(angle = 50, hjust = 1, face = "bold")) +
theme(legend.position = "top") +
labs(x = "Macroregiones de la CEV",
y = "Número de víctimas",
fill = "") +
scale_fill_manual(values = c("Observado" = "#2F2F2F",
"Rango de imputación" = "#1F74B1"))
grafica
Las barras de color gris oscuro muestran los datos documentados. Ahora bien,
esta documentación se refiere a víctimas de las cuales sabemos que efectivamente
fueron víctimas dentro del marco del conflicto armado; pero, ¿qué hay de las
víctimas sin información acerca de esta característica? Pues bien, esta información
(junto con la ya documentada) se encuentra en la barra azul, la cual muestra
las víctimas después del proceso de imputación múltiple (barras azules indican
el rango de imputación -intervalos de confianza-, siendo los puntos centrales
la media de la imputación), es decir, como se indicó anteriormente, acá estamos
incluyendo aquellas víctimas para las que no teniamos conocimiento de si estaban
o no dentro de dicho marco.
Así, después del proceso de imputación estadística y con un con un nivel de confianza del 95% se evidencia que hubo entre 141 187 a 146 377 víctimas en la macrorregion de Antioquia-Eje Cafetero, con un promedio de 143 782. Es decir, esto implica que este promedio es la mejor estimación puntual respecto al número de víctimas de esta categoría, no obstante, hay que tener en cuenta que siempre tendremos la incertidumbre de la imputación y que dicho fenómeno estará representado por el intervalo de confianza del 95%.
Por último, guardamos los resultados (en formato .parquet) en una carpeta denominada “output-imputados”, ya que esta tabla nos servirá como insumo para dimensionar los patrones de documentación de la violencia (como este y el anterior ejemplo) en contraste con los patrones de violencia a partir de la estimación y combinación
Ejercicio
Acorde con la anterior interpretación, ¿cómo interpretaría los resultados para las demás categorías?